//
//  XMLFile.m
//  Rainbow
//
//  Created by Guillaume Dupuis on 21/07/09.
//  Copyright 2009 Erasmus Software. All rights reserved.
//

#import "XMLFile.h"
#include <sys/stat.h>

@implementation NSXMLDocument (XMLFile)

+(NSXMLDocument*)createXMLDocumentFromFile:(NSString*)path
{
    // on traduit le chemin d'accès en URL
    NSURL *fileURL=[NSURL fileURLWithPath:path];
    if(!fileURL) {
        NSLog(@"file not created");
        return nil;
    }
    // On crée l'instance de NSXMLDocument à partir du fichier en le supposant bien formaté
	// Les constantes  sont dans la doc de NSXMLDocument et NSXMLNode
    NSXMLDocument *xmlDoc;
    NSError *error;
    xmlDoc=[[NSXMLDocument alloc] initWithContentsOfURL:fileURL    
												options:NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA    
												  error:&error];
	// création avec un prétraitement du fichier (option NSXMLDocumentTidyXML
    if(!xmlDoc) {
        xmlDoc=[[NSXMLDocument alloc] initWithContentsOfURL:fileURL    
													options:NSXMLDocumentTidyXML    
													  error:&error];
    }
    // Gestion des erreurs
    if(!xmlDoc)
	{
        if([error code] == -1014) // file not found => create a new file
		{
			mkdir([[NSHomeDirectory() stringByAppendingPathComponent: @"Library/Application Support/Rainbow/"] UTF8String], 0000755);
			NSString *new_file = @"<?xml version=\"1.0\" encoding=\"UTF-8\"?><dvdtech owner=\"bob\"></dvdtech>";
			xmlDoc=[[NSXMLDocument alloc] initWithXMLString:new_file
													options:NSXMLNodePreserveWhitespace|NSXMLNodePreserveCDATA    error:&error];
		}
	}
	if(!xmlDoc) {
		if (error)
			NSLog(@"xmlDoc not screated.\n%@",error);
		else
            NSLog(@"xmlDoc not created");
	}
	
	return xmlDoc;
}

-(BOOL)writeToFile:(NSString*) path ofType:(NSString*)type
{
	NSData *xmlData=[self XMLDataWithOptions:NSXMLNodePrettyPrint];
	BOOL fileWritten = [xmlData writeToFile:path atomically:YES];
	if (fileWritten)
		NSLog(@"File created");
	else
		NSLog(@"File not created");
	
	return fileWritten;
}

@end
